
package br.pb.sistcomp.dao;

import br.pb.sistcomp.entity.Mensagem;
import br.pb.sistcomp.util.HibernateUtil;
import java.util.List;
import javax.persistence.EntityManager;

/**
 * Class that represents an entity in the system
 *
 * @author Kawe Ramon, kawe.ramon@dce.ufpb.br
 * @version 1.0
 *
 * Copyright (C) 2011 SistComp.
 */
public class MensagemDaoImpl implements MensagemDao{

    private EntityManager em = null;
    
    /*
     * Construtor para iniciar o EntityManager
     */
    public MensagemDaoImpl(){
        em = HibernateUtil.getInstance().getFactory().createEntityManager();
    }
    
    /*Método responsavel por salvar no banco de dados todas as informações da mensagem
     * @param mensagem objeto do tipo Mensagem que guarda as informações de uma mensagem
     * para ser salvas no banco
     * 
     */
    public void cadastrarMensagem(Mensagem mensagem){
        em.getTransaction().begin();
        em.persist(mensagem);
        em.getTransaction().commit();
    }
    
    /*
     * Método responsavel por remover uma mensagem do banco de dados
     * @param id objeto do tipo int que server para indicar qual mensagem ser excluida
     */
    
    public void removerMensagem(Mensagem m){
        em.getTransaction().begin();
        em.remove(em.find(Mensagem.class, m.getId()));
        em.getTransaction().commit();
    }
    
    /*Método responsavel por retornar todas as mensagens que estao no banco de dados
     * @return retorna uma lista com todas as mensagens do banco
     * 
     */
    
    public List<Mensagem> listarTodas(){
        return em.createQuery("SELECT c from Mensagem c").getResultList();

    }
    
    /*Método responsavel por listar todas as mensagens enviadas
     * @return lista de todas as mensagens enviadas
     */
    
    public List<Mensagem> listarMensagensEnviadas(){
        List<Mensagem> mensagens = em.createQuery("SELECT c from Mensagem c WHERE status = 'Enviada'").getResultList();
        return mensagens;

    }
    
    /*Método responsável por listar todas as mensagens recebidas
     * @return retorna uma lista de mensagens recebidas
     * 
     */
    public List<Mensagem> listarMensagensRecebidas(){
         return em.createQuery("SELECT c from Mensagem c WHERE status = 'Recebida'").getResultList();

    }
}
